home *** CD-ROM | disk | FTP | other *** search
/ Nebula 2 / Nebula Two.iso / SourceCode / MiniExamples / AppKit / CellScrollView / CellScrollView.m < prev    next >
Text File  |  1993-06-22  |  3KB  |  114 lines

  1. /*
  2.  * You may freely copy, distribute, and reuse the code in this example.
  3.  * NeXT disclaims any warranty of any kind, expressed or  implied, as to its
  4.  * fitness for any particular use.
  5.  */
  6.  
  7.  
  8. #import "CellScrollView.h"
  9. #import "FooCell.h"
  10.  
  11. @implementation CellScrollView
  12.  
  13. - init
  14. {
  15.   return [self initFrame:NULL];
  16. }
  17.  
  18. - initFrame:(const NXRect *)frameRect
  19. {
  20.   NXSize interCellSpacing = {0.0, 0.0}, docSize;
  21.  
  22.   [super initFrame:frameRect];
  23.   cellMatrix = [[Matrix alloc] initFrame:frameRect
  24.         mode:NX_LISTMODE
  25.         cellClass:[FooCell class]
  26.         numRows:0
  27.         numCols:1];
  28.  
  29.   /*
  30.    * In the following lines,
  31.    * remember that "cellMatrix" is the matrix that will be installed
  32.    * in the scrollview, "self" is the scrollview.
  33.    */
  34.  
  35.   /* we don't want any space between the matrix's cells  */
  36.   [cellMatrix setIntercell:&interCellSpacing];
  37.   /* resize the matrix to contain the cells */
  38.   [cellMatrix sizeToCells];
  39.   [cellMatrix setAutosizeCells:YES];
  40.   /*
  41.    * when the user clicks in the matrix and then drags the mouse out of
  42.    * scrollView's contentView, we want the matrix to scroll
  43.    */
  44.   [cellMatrix setAutoscroll:YES];
  45.   /* let the matrix stretch horizontally */
  46.   [cellMatrix setAutosizing:NX_WIDTHSIZABLE];  
  47.   /* Install the matrix as the docview of the scrollview */
  48.   [[self setDocView:cellMatrix] free];
  49.   /* set up the visible attributes of the scrollview */
  50.   [self setVertScrollerRequired:YES];
  51.   [self setBorderType:NX_BEZEL];
  52.   /* tell the subviews to resize along with the scrollview */
  53.   [self setAutoresizeSubviews:YES];
  54.   /* This is the only way to get the clipview to resize too */
  55.   [[cellMatrix superview] setAutoresizeSubviews:YES];
  56.   /* Allow the scrollview to stretch both horizontally and vertically */
  57.   [self setAutosizing:NX_WIDTHSIZABLE|NX_HEIGHTSIZABLE];
  58.   /* Resize the matrix to fill the inside of the scrollview */
  59.   [self getContentSize:&docSize];
  60.   [cellMatrix sizeTo:docSize.width :docSize.height];
  61.  
  62.   return self;
  63. }
  64.  
  65. - free
  66. {
  67.   [cellMatrix free];
  68.   return [super free];
  69. }
  70.  
  71. - cellMatrix
  72. {
  73.   return cellMatrix;
  74. }
  75.  
  76. - loadCellsFrom:(List *)fooObjects
  77. /*
  78.  * Fill the matrix with FooCells, associate each FooCell with a FooObject.
  79.  *
  80.  * Since we recycle the cells (via renewRows:cols:), we also set the state
  81.  * of each cell to 0 and unhighlight it.  If we don't do that, the recycled
  82.  * cells will display their previous state.
  83.  */
  84. {
  85.   int i, cellCount;
  86.  
  87.   cellCount = [fooObjects count];
  88.  
  89.   /* tell the matrix there are 0 cells in it (but don't deallocate them) */
  90.   [cellMatrix renewRows:0 cols:1];
  91.   [cellMatrix lockFocus];        /* for highlightCellAt::lit: */
  92.   for (i=0;i<cellCount;i++) {
  93.     FooCell *cell;
  94.     /*
  95.      * add a row to the matrix.  (This doesn't necessarily allocate a new
  96.      * cell, thanks to renewRows:cols:).
  97.      */
  98.     [cellMatrix addRow];
  99.     cell = [cellMatrix cellAt:i:0];
  100.     /* make sure the cell is neither selected nor highlighted */
  101.     [cellMatrix highlightCellAt:i:0 lit:NO];
  102.     [cell setState:0];
  103.     /* install the fooObject in that cell */
  104.     [cell setFooObject:[fooObjects objectAt:i]];
  105.   }
  106.   [cellMatrix unlockFocus];
  107.   [cellMatrix sizeToCells];
  108.   [cellMatrix display];
  109.   
  110.   return self;
  111. }
  112.  
  113. @end
  114.